import cfg from '../config';
import * as ajax from '../lib/kajax';
import {setCache, getCache, removeCache} from '../lib/kcache';
const $ = require('../lib/kdom');
import {sid, tab} from '../util/api';

// 删除一组元素的 class
function removeCls(els, cls, cb) {
    // console.log(els);
    if (els && els.length <= 0) return;
    for (let i = 0; i < els.length; i++) {
        $.removeClass(els[i], cls);
    }
    if (cb) cb();
}

function cityDataCache(val) {
    if (val !== undefined) {
        setCache(cfg.train.trainCityLib, {data: val, date: new Date(), expire: cfg.app.expire});
    } else {
        return getCache(cfg.train.trainCityLib) || '';
    }
}

/*
 * 格式化日期
 @param "yyyy-MM-dd"
 @param new Date(date)

 * formatDate('yyyy-MM-dd'[,new Date()]);
 formatDate('yyyy/MM/dd'[,new Date()]);
 formatDate('yyyy年MM月dd'[,new Date()]);
 @param 'yyyy年MM月dd' 必填参数 ；格式为 -> 字符串 （分隔符 自定义）
 @param [,new Date()] 选填参数 ；格式为 -> 时间对象

 * type为datetime-local
 value设置的格式为：YYYY-MM-DDTHH:mm:ss
 如果需要设置到秒，可以再加入：step=1
 starDateVal.value = formatDate('yyyy-MM-ddThh:mm:ss');
 */
function formatDate(format, newDate) {
    newDate = newDate ? new Date(newDate) : new Date();
    let k, reg,
        o = {
            'y+': newDate.getFullYear(), //year
            'M+': newDate.getMonth() + 1, //month
            'd+': newDate.getDate(), //day
            'h+': newDate.getHours(), //hour
            'm+': newDate.getMinutes(), //minute
            's+': newDate.getSeconds(), //second
        };
    for (k in o) {
        reg = new RegExp('(' + k + ')');
        if (reg.test(format)) format = format.replace(reg, o[k] < 10 ? ('0' + o[k]) : o[k]);
    }
    return format;
}
/*
 function formatDate(format, newDate) {
 if (format) {
 newDate = newDate ? new Date(newDate) : new Date();
 let o = {
 'M+': newDate.getMonth() + 1, //month
 'd+': newDate.getDate(), //day
 'h+': newDate.getHours(), //hour
 'm+': newDate.getMinutes(), //minute
 's+': newDate.getSeconds(), //second
 'q+': Math.floor((newDate.getMonth() + 3) / 3), //quarter
 'S': newDate.getMilliseconds() //millisecond
 };

 if (/(y+)/.test(format)) {
 format = format.replace(RegExp.$1, (newDate.getFullYear() + '').substr(4 - RegExp.$1.length));
 }

 for (let k in o) {
 if (new RegExp('(' + k + ')').test(format)) {
 format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
 }
 }
 return format;
 }
 }
 */

// 前一天
function getPrevDate(currDate) {
    if (!currDate) return;
    currDate = new Date(currDate).getTime();
    return formatDate('yyyy-MM-dd', new Date(currDate - 24 * 60 * 60 * 1000));
}

// 后一天
function getNextDate(currDate) {
    if (!currDate) return;
    currDate = new Date(currDate).getTime();
    return formatDate('yyyy-MM-dd', new Date(currDate + 24 * 60 * 60 * 1000));
}
function getCurrDay(date) {
    const arr = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'];
    let idx = new Date(date).getDay();
    idx = idx === 0 ? (arr.length - 1) : (idx - 1);
    return arr[idx];
}

function randomColor(str) {
    let rc = `0x${str || 'ffffff'}`;
    return `#${Math.floor(Math.random() * rc).toString(16)}`;
}

// 判断数组包含关系
// true 包含
function isArrContain(arr, obj, key) {
    if (!arr) return; else if (arr.length <= 0) return;
    let i = arr.length;
    while (i--) {
        if (key) {
            if (arr[i][key] == obj[key]) {
                return true;
            }
        } else {
            if (arr[i] == obj) {
                return true;
            }
        }
    }
    return false;
}
// 判断数组不包含关系
// true 不包含
function isArrNoContain(arr, obj, key) {
    // console.log('isArrayNotContain', arr, obj);
    if (!arr) return; else if (arr.length <= 0) return;
    let i = arr.length;
    while (i--) {
        if (key) {
            if (arr[i][key] != obj[key]) {
                return true;
            }
        } else {
            if (arr[i] != obj) {
                return true;
            }
        }
    }
    return false;
}
// 查找字符串
function findStr(str, val) {
    str = str instanceof Array ? str.join(',') : str;
    return new RegExp(',' + val + ',').test(',' + str + ',');
}

// isSelector
function isSelector(val) {
    if (!val) return;
    let rc = null;
    if (val instanceof Object) {
        rc = val;
    } else {
        rc = $.qu(val);
    }
    return rc;
}

// backPage
// str 当前页面的id字符串
function backPage(str, child, cb) {
    if (!str && child) return;
    let tag = $.qu(`${str} .${child}`);
    tag.onclick = () => {
        if (cb) {
            cb();
        }
    };
}
/*
 * 温馨提示
 * @param 当前父页面的ID字符串
 * @param msg
 * */
// message('#TestConyent', '我是首页！');// #TestConyent 父页面的选择器
// closeMsg('#TestConyent');
function message(tid, msg) {
    if (!tid) return;
    let tag = isSelector(tid);
    if (tag) {
        $.html(tag, `<div class="message" id="${tag.id}-message">${msg || '亲！您暂时还没有获取更多的相关信息哦，请重新查询哦！'}</div>`);
    }
}

function closeMsg(tid) {
    if (!tid) return;
    let tag = isSelector(tid);
    if (tag) {
        if ($.id(`${tag.id}-message`)) tag.removeChild($.id(`${tag.id}-message`));
    }
}

//页面进入请求pinyin库
function getPinYin(cb) {
    let rc = localStorage.getItem(cfg.train.pinYin);
    if (rc && cb) {
        cb(JSON.parse(rc));
    } else {
        ajax.get(`${cfg.doc.host}${cfg.doc.pingYin}`, '', (rs) => {
            if (rs) {
                localStorage.setItem(cfg.train.pinYin, rs);
                if (cb) cb(JSON.parse(rs));
            }
        });
    }
}


// 获得乘客，并做会话存储，提供判断差旅用
function getPassengers(cb) {
    // let rc = sessionStorage.getItem(cfg.train.passengerData);
    // if (rc && cb) {
    //   cb(eval('(' + rc + ')'));
    // } else {
    ajax.post(`${cfg.train.host}${cfg.train.getICBCPassenger}`, '', (err, rs) => {
        if (rs) {
            sessionStorage.setItem(cfg.train.passengerData, rs);
            if (cb) cb(eval('(' + rs + ')'));
        }
    });
    // }
}
// 获取经停信息
function getJingTinInfoFun(val, cb) {
    let rc = sessionStorage.getItem(cfg.train.TJ_Info);
    if (rc && cb) {
        cb(eval('(' + rc + ')'));
    } else {
        ajax.get(`${cfg.train.host}${cfg.train.getAct}${cfg.train.gettrainbycode}&traincode=${val}`, '', (rs) => {
            if (rs) {
                sessionStorage.setItem(cfg.train.TJ_Info, rs);
                if (cb) cb(JSON.parse(rs));
                // if (cb) cb(eval('(' + rs + ')'));
            }
        });
    }
}
function strfind(str, val) {
    if (!str, !val) return;
    if (str instanceof Array) str.join(',');
    return new RegExp(',' + val + ',').test(',' + str + ',');
}

// 身份证
function hideIdcard(e) {
    let reg = /^(.{3})(?:\d+)(.{4})$/;
    if (e.length <= 10) {
        reg = /^(.{2})(?:\d+)(.{2})$/;
    }
    let data = {
        hide: e.replace(reg, '$1****$2'),
        show: e,
    };
    return data;
}

function isEmptyObj(obj) {
    for (let key in obj) {
        return false
    }
    return true
}

/*
 * 标签页切换
 * @param 一组同级的选择器（数组）
 * */
function tabSwitch(els, cb) {
    if (els && els.length <= 0) return;
    els.forEach(function (el) {
        el.onclick = () => {
            els.forEach(function (child) {
                $.removeClass(child, 'active');
            });
            $.addClass(el, 'active');
            if (cb && cb instanceof Function) cb(el);
        }
    });
}

function getTrainCityFun(cb) {
    let rc = cityDataCache();
    if (rc) {
        // console.log('本地存储', rc);
        if (cb instanceof Function) cb(rc);
    } else {
        // 正式地址
        // ajax.get(`${cfg.train.host}${cfg.train.getAct}${cfg.train.stationlist}`, '', (rs) => {
        // 测试地址
        ajax.get('http://flight-10038118.cossh.myqcloud.com/train/res/lib/trainCityLib.txt', '', (rs) => {
            if (rs) {
                let rc = JSON.parse(rs);
                if (rc && rc.data) {
                    rc = rc.data;
                    cityDataCache(rc);
                    if (cb instanceof Function) cb(rc);
                    // console.log('rc', rc);
                }
            }
        });
    }
}

function trainPact(cb) {
    let rc = localStorage.getItem(cfg.train.trainPact);
    if (rc) {
        if (cb instanceof Function) cb(rc);
    } else {
        ajax.get(`${cfg.doc.host}${cfg.doc.trainPact}`, '', (rs) => {
            if (rs) {
                localStorage.setItem(cfg.train.trainPact, rs);
                if (cb instanceof Function) cb(rs);
            }
        });
    }
}

// 删除数组指定元素
// @param arr 数组
// @param id 数组元素值
function removeArrEl(arr, id) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] instanceof Object) {
            if (arr[i][0] == id) {
                arr.splice(i, 1);
                break;
            }
        } else if (new String(arr[i]) instanceof String) {
            if (arr[i] == id) {
                console.log(arr[i] == id);
                arr.splice(i, 1);
                break;
            }
        }
    }
    return arr;
}
function convertPinyin(code, pinyin) {
    //汉字转换为拼音
    let rc = [];
    for (let i = 0, d = code, len = code.length; i < len; i++) {
        for (let key in pinyin) {
            if (pinyin[key].indexOf(d[i]) > -1) rc.push(key);
        }
    }
    // console.log(rc);
    return rc;
}
// 用户列表
function getUserList(mobile, cb) {
    // let rc = sessionStorage.getItem(cfg.app.nuoyaUserList);
    // if (rc) {
    //     if (cb) cb(JSON.parse(rc))
    // } else
    ajax.get(`${HOST_URL}${cfg.ogs.userList}`, `mobile=${mobile}&sid=${sid()}&tab=${tab()}`, rs => {
        // console.log(rs);
        if (rs) {
            let r = JSON.parse(rs);
            sessionStorage.setItem(cfg.app.nuoyaUserList, JSON.stringify(r.data));
            if (cb) cb(r.data)
        }
    });
}

// 用户列表
function getRosterList(mobile, cb) {
    let rc = sessionStorage.getItem(cfg.app.nuoyaRosterList);
    if (rc) {
        if (cb) cb(JSON.parse(rc))
    } else
        ajax.get(`${HOST_URL}${cfg.ogs.rosterList}`, `sid=${sid()}&tab=${tab()}`, rs => {
            // console.log(rs);
            if (rs) {
                let r = JSON.parse(rs);
                sessionStorage.setItem(cfg.app.nuoyaRosterList, JSON.stringify(r.data));
                if (cb) cb(r.data)
            }
        });
}

// 个人用户信息
function getUser(mobile, pid, cb) {
    console.log(`mobile=${mobile}&pid=${pid}&sid=${sid()}&tab=${tab()}`);
    ajax.get(`${HOST_URL}${cfg.ogs.getVirtue}`, `mobile=${mobile}&pid=${pid}&sid=${sid()}&tab=${tab()}`, rs => {
        if (rs) {
            let r = JSON.parse(rs);
            if (cb) cb(r.data);
        }
    });
}


function jumpUrl(mobile, cb) {
    getUser(mobile, '', (user) => {
        getRosterList('', (roster) => {
            console.log(user, roster);
            if (cb) cb(user, roster);
        });
    });
}

export {formatDate, getCurrDay, randomColor, isArrContain, isArrNoContain, findStr, backPage, getPrevDate, getNextDate, isSelector, message, closeMsg, getPinYin, getPassengers, strfind, hideIdcard, isEmptyObj, getJingTinInfoFun, tabSwitch, cityDataCache, getTrainCityFun, trainPact, removeArrEl, removeCls, convertPinyin, getUserList, getUser, getRosterList, jumpUrl};